{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import keras \n",
    "import pprint\n",
    "from keras.datasets import mnist\n",
    "from keras.layers import Conv2D, MaxPooling2D, Dense, Dropout, Flatten, Input\n",
    "from keras.models import Sequential, Model\n",
    "import keras.backend as K\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载手写字体\n",
    "\n",
    "从keras自带的数据库中加载mnist手写字体"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_train shape: (60000, 1, 28, 28)\n",
      "x_test shape: (10000, 1, 28, 28)\n"
     ]
    }
   ],
   "source": [
    "img_rows, img_cols = (28,28)\n",
    "num_classes = 10\n",
    "\n",
    "def get_mnist_data():\n",
    "    \"\"\"\n",
    "    加载mnist手写字体数据集\n",
    "    \"\"\"\n",
    "    (x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
    "    \n",
    "    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)\n",
    "    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)\n",
    "    \n",
    "    x_train = x_train.astype('float32')\n",
    "    x_test = x_test.astype('float32')\n",
    "    x_train /= 255\n",
    "    x_test /= 255\n",
    "    \n",
    "    y_train = keras.utils.to_categorical(y_train, num_classes)\n",
    "    y_test = keras.utils.to_categorical(y_test, num_classes)\n",
    "    \n",
    "    return x_train, y_train, x_test, y_test\n",
    "\n",
    "x_train, y_train, x_test, y_test = get_mnist_data()\n",
    "print('x_train shape:', x_train.shape)\n",
    "print('x_test shape:', x_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LetNet5 网络模型架构"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model loaded.\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_6 (InputLayer)         (None, 1, 28, 28)         0         \n",
      "_________________________________________________________________\n",
      "conv1 (Conv2D)               (None, 32, 28, 28)        320       \n",
      "_________________________________________________________________\n",
      "pool1 (MaxPooling2D)         (None, 32, 13, 13)        0         \n",
      "_________________________________________________________________\n",
      "conv2 (Conv2D)               (None, 64, 13, 13)        18496     \n",
      "_________________________________________________________________\n",
      "pool2 (MaxPooling2D)         (None, 64, 6, 6)          0         \n",
      "_________________________________________________________________\n",
      "dropout_16 (Dropout)         (None, 64, 6, 6)          0         \n",
      "_________________________________________________________________\n",
      "flatten (Flatten)            (None, 2304)              0         \n",
      "_________________________________________________________________\n",
      "fc1 (Dense)                  (None, 128)               295040    \n",
      "_________________________________________________________________\n",
      "dropout_17 (Dropout)         (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "fc2 (Dense)                  (None, 128)               16512     \n",
      "_________________________________________________________________\n",
      "dropout_18 (Dropout)         (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "predictions (Dense)          (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 331,658\n",
      "Trainable params: 331,658\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "def LeNet5(w_path=None):\n",
    "    \n",
    "    input_shape = (1, img_rows, img_cols)\n",
    "    img_input = Input(shape=input_shape)\n",
    "   \n",
    "    x = Conv2D(32, (3, 3), activation=\"relu\", padding=\"same\", name=\"conv1\")(img_input)\n",
    "    x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x)\n",
    "    x = Conv2D(64, (3, 3), activation=\"relu\", padding='same', name='conv2')(x)\n",
    "    x = MaxPooling2D((2, 2), strides=(2, 2), name='pool2')(x)\n",
    "    x = Dropout(0.25)(x)\n",
    "    \n",
    "    x = Flatten(name='flatten')(x)\n",
    "    \n",
    "    x = Dense(128, activation='relu', name='fc1')(x)\n",
    "    x = Dropout(0.5)(x)\n",
    "    x = Dense(128, activation='relu', name='fc2')(x)\n",
    "    x = Dropout(0.5)(x)\n",
    "    x = Dense(10, activation='softmax', name='predictions')(x)\n",
    "    \n",
    "    model = Model(img_input, x, name='LeNet5')\n",
    "    if(w_path): model.load_weights(w_path)\n",
    "    \n",
    "    return model\n",
    "\n",
    "lenet5 = LeNet5()\n",
    "print('Model loaded.')\n",
    "lenet5.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LeNet5 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/30\n",
      "60000/60000 [==============================] - 6s 95us/step - loss: 0.0618 - acc: 0.9832 - val_loss: 0.0299 - val_acc: 0.9915\n",
      "Epoch 2/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0591 - acc: 0.9844 - val_loss: 0.0272 - val_acc: 0.9920\n",
      "Epoch 3/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0535 - acc: 0.9851 - val_loss: 0.0258 - val_acc: 0.9923\n",
      "Epoch 4/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0527 - acc: 0.9858 - val_loss: 0.0243 - val_acc: 0.9929\n",
      "Epoch 5/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0524 - acc: 0.9862 - val_loss: 0.0242 - val_acc: 0.9929\n",
      "Epoch 6/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0495 - acc: 0.9867 - val_loss: 0.0243 - val_acc: 0.9930\n",
      "Epoch 7/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0472 - acc: 0.9873 - val_loss: 0.0263 - val_acc: 0.9915\n",
      "Epoch 8/30\n",
      "60000/60000 [==============================] - 5s 86us/step - loss: 0.0455 - acc: 0.9875 - val_loss: 0.0246 - val_acc: 0.9923\n",
      "Epoch 9/30\n",
      "60000/60000 [==============================] - 5s 83us/step - loss: 0.0449 - acc: 0.9875 - val_loss: 0.0239 - val_acc: 0.9934\n",
      "Epoch 10/30\n",
      "60000/60000 [==============================] - 5s 85us/step - loss: 0.0434 - acc: 0.9887 - val_loss: 0.0212 - val_acc: 0.9938\n",
      "Epoch 11/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0424 - acc: 0.9884 - val_loss: 0.0213 - val_acc: 0.9937\n",
      "Epoch 12/30\n",
      "60000/60000 [==============================] - 5s 89us/step - loss: 0.0399 - acc: 0.9895 - val_loss: 0.0228 - val_acc: 0.9926\n",
      "Epoch 13/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0424 - acc: 0.9885 - val_loss: 0.0215 - val_acc: 0.9936\n",
      "Epoch 14/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0394 - acc: 0.9896 - val_loss: 0.0218 - val_acc: 0.9933\n",
      "Epoch 15/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0406 - acc: 0.9891 - val_loss: 0.0229 - val_acc: 0.9932\n",
      "Epoch 16/30\n",
      "60000/60000 [==============================] - 5s 90us/step - loss: 0.0376 - acc: 0.9899 - val_loss: 0.0206 - val_acc: 0.9940\n",
      "Epoch 17/30\n",
      "60000/60000 [==============================] - 5s 89us/step - loss: 0.0371 - acc: 0.9895 - val_loss: 0.0209 - val_acc: 0.9942\n",
      "Epoch 18/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0366 - acc: 0.9902 - val_loss: 0.0231 - val_acc: 0.9936\n",
      "Epoch 19/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0353 - acc: 0.9900 - val_loss: 0.0205 - val_acc: 0.9942\n",
      "Epoch 20/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0358 - acc: 0.9909 - val_loss: 0.0229 - val_acc: 0.9931\n",
      "Epoch 21/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0332 - acc: 0.9909 - val_loss: 0.0193 - val_acc: 0.9943\n",
      "Epoch 22/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0354 - acc: 0.9905 - val_loss: 0.0189 - val_acc: 0.9949\n",
      "Epoch 23/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0335 - acc: 0.9907 - val_loss: 0.0205 - val_acc: 0.9949\n",
      "Epoch 24/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0338 - acc: 0.9904 - val_loss: 0.0190 - val_acc: 0.9948\n",
      "Epoch 25/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0329 - acc: 0.9906 - val_loss: 0.0203 - val_acc: 0.9940\n",
      "Epoch 26/30\n",
      "60000/60000 [==============================] - 5s 86us/step - loss: 0.0315 - acc: 0.9914 - val_loss: 0.0210 - val_acc: 0.9945\n",
      "Epoch 27/30\n",
      "60000/60000 [==============================] - 5s 86us/step - loss: 0.0312 - acc: 0.9914 - val_loss: 0.0212 - val_acc: 0.9944\n",
      "Epoch 28/30\n",
      "60000/60000 [==============================] - 5s 87us/step - loss: 0.0320 - acc: 0.9912 - val_loss: 0.0231 - val_acc: 0.9933\n",
      "Epoch 29/30\n",
      "60000/60000 [==============================] - 5s 86us/step - loss: 0.0310 - acc: 0.9919 - val_loss: 0.0190 - val_acc: 0.9948\n",
      "Epoch 30/30\n",
      "60000/60000 [==============================] - 5s 88us/step - loss: 0.0322 - acc: 0.9918 - val_loss: 0.0197 - val_acc: 0.9953\n",
      "Test loss: 0.0197388240156\n",
      "Test accuracy: 0.9953\n"
     ]
    }
   ],
   "source": [
    "from keras.callbacks import ModelCheckpoint\n",
    "\n",
    "if not os.path.exists('lenet5_checkpoints'):\n",
    "    os.mkdir('lenet5_checkpoints')\n",
    "    \n",
    "lenet5.compile(loss=keras.losses.categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adadelta(),\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "checkpoint = ModelCheckpoint(monitor='val_acc', \n",
    "                             filepath = 'lenet5_checkpoints/model_{epoch:02d}_{val_acc:.3f}.h5',\n",
    "                             save_best_only = True)\n",
    "\n",
    "lenet5.fit(x_train, y_train,\n",
    "         batch_size = 128,\n",
    "         epochs = 30,\n",
    "         verbose = 1,\n",
    "         validation_data = (x_test, y_test),\n",
    "         callbacks = [checkpoint])\n",
    "\n",
    "score = lenet5.evaluate(x_test, y_test, verbose = 0)\n",
    "print('Test loss:', score[0])\n",
    "print('Test accuracy:', score[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.07      0.02      0.03       980\n",
      "          1       0.00      0.00      0.00      1135\n",
      "          2       0.11      0.93      0.20      1032\n",
      "          3       0.02      0.02      0.02      1010\n",
      "          4       0.76      0.01      0.03       982\n",
      "          5       0.00      0.00      0.00       892\n",
      "          6       0.00      0.00      0.00       958\n",
      "          7       0.00      0.00      0.00      1028\n",
      "          8       0.00      0.00      0.00       974\n",
      "          9       0.21      0.08      0.11      1009\n",
      "\n",
      "avg / total       0.12      0.11      0.04     10000\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zomi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "\n",
    "y_pred = lenet5.predict(x_test)\n",
    "y_pred = np.argmax(y_pred, axis = 1)\n",
    "y_test = np.argmax(y_test, axis = 1)\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 可视化过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_7 (InputLayer)         (None, 1, 28, 28)         0         \n",
      "_________________________________________________________________\n",
      "conv1 (Conv2D)               (None, 32, 28, 28)        320       \n",
      "_________________________________________________________________\n",
      "pool1 (MaxPooling2D)         (None, 32, 13, 13)        0         \n",
      "_________________________________________________________________\n",
      "conv2 (Conv2D)               (None, 64, 13, 13)        18496     \n",
      "_________________________________________________________________\n",
      "pool2 (MaxPooling2D)         (None, 64, 6, 6)          0         \n",
      "_________________________________________________________________\n",
      "dropout_19 (Dropout)         (None, 64, 6, 6)          0         \n",
      "_________________________________________________________________\n",
      "flatten (Flatten)            (None, 2304)              0         \n",
      "_________________________________________________________________\n",
      "fc1 (Dense)                  (None, 128)               295040    \n",
      "_________________________________________________________________\n",
      "dropout_20 (Dropout)         (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "fc2 (Dense)                  (None, 128)               16512     \n",
      "_________________________________________________________________\n",
      "dropout_21 (Dropout)         (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "predictions (Dense)          (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 331,658\n",
      "Trainable params: 331,658\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "10000/10000 [==============================] - 1s 61us/step\n",
      "Test loss: 0.0197388240156\n",
      "Test accuracy: 0.9953\n"
     ]
    }
   ],
   "source": [
    "lenet5 = LeNet5()\n",
    "lenet5.compile(optimizer='adam', \n",
    "               loss='categorical_crossentropy', \n",
    "               metrics=['accuracy'])\n",
    "\n",
    "lenet5.summary()\n",
    "\n",
    "x_train, y_train, x_test, y_test = get_mnist_data()\n",
    "test_loss, test_acc = lenet5.evaluate(x_test, y_test, verbose=1, batch_size=128)\n",
    "print('Test loss:', score[0])\n",
    "print('Test accuracy:', score[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1144\n",
      "1144 label:[ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f590e28c320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "i = np.random.choice(x_test.shape[0])\n",
    "print(i)\n",
    "plt.imshow(x_test[i, 0], interpolation='None', cmap='gray')\n",
    "print(\"{} label:{}\".format(i, y_train[i,:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3, 3, 1, 32)\n",
      "(3, 3, 32)\n"
     ]
    }
   ],
   "source": [
    "layer1 = lenet5.get_layer(\"conv1\")\n",
    "\n",
    "\n",
    "w = layer1.get_weights()\n",
    "print(w[0].shape)\n",
    "print(np.squeeze(w[0]).shape)\n",
    "\n",
    "# plt.figure(figsize=(15,15))\n",
    "# plt.title(\"Conv1 weights\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[<tf.Tensor 'input_7:0' shape=(?, 1, 28, 28) dtype=float32>,\n",
      " <tf.Tensor 'conv1_6/Relu:0' shape=(?, 32, 28, 28) dtype=float32>,\n",
      " <tf.Tensor 'pool1_6/MaxPool:0' shape=(?, 32, 13, 13) dtype=float32>,\n",
      " <tf.Tensor 'conv2_6/Relu:0' shape=(?, 64, 13, 13) dtype=float32>,\n",
      " <tf.Tensor 'pool2_6/MaxPool:0' shape=(?, 64, 6, 6) dtype=float32>,\n",
      " <tf.Tensor 'dropout_19/dropout/mul:0' shape=(?, 64, 6, 6) dtype=float32>,\n",
      " <tf.Tensor 'flatten_6/Reshape:0' shape=(?, ?) dtype=float32>,\n",
      " <tf.Tensor 'fc1_6/Relu:0' shape=(?, 128) dtype=float32>,\n",
      " <tf.Tensor 'dropout_20/dropout/mul:0' shape=(?, 128) dtype=float32>,\n",
      " <tf.Tensor 'fc2_6/Relu:0' shape=(?, 128) dtype=float32>,\n",
      " <tf.Tensor 'dropout_21/dropout/mul:0' shape=(?, 128) dtype=float32>,\n",
      " <tf.Tensor 'predictions_6/Softmax:0' shape=(?, 10) dtype=float32>]\n",
      "(1, 1, 28, 28)\n"
     ]
    }
   ],
   "source": [
    "def get_activations(model, model_input, layer_name = None):\n",
    "    activations = []\n",
    "    inp = [model.input]\n",
    "    \n",
    "    # 所有层的输出 \n",
    "    model_layers = [layer.output for layer in model.layers if \n",
    "               layer.name == layer_name or layer_name is None]\n",
    "    pprint.pprint(model_layers)\n",
    "    \n",
    "    newmodel_layers = []\n",
    "    newmodel_layers.append(model_layers[0])\n",
    "    newmodel_layers.append(model_layers[1])\n",
    "    newmodel_layers.append(model_layers[2])\n",
    "    newmodel_layers.append(model_layers[3])\n",
    "    newmodel_layers.append(model_layers[4])\n",
    "    newmodel_layers.append(model_layers[7])\n",
    "    newmodel_layers.append(model_layers[9])\n",
    "    newmodel_layers.append(model_layers[11])\n",
    "\n",
    "    funcs = [K.function(inp + [K.learning_phase()], [layer]) for layer in newmodel_layers]\n",
    "    \n",
    "    list_inputs = model_input.reshape(1,1,28,28)\n",
    "    print(list_inputs.shape)\n",
    "    \n",
    "        \n",
    "    layer_outputs = [func([list_inputs]) for func in funcs]\n",
    "    for activation in layer_outputs:\n",
    "        activations.append(activation)\n",
    "        \n",
    "    return activations\n",
    "\n",
    "activations = get_activations(lenet5, x_test[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 0 (1, 1, 28, 28)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n55MAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f59021b1e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 1 (1, 32, 28, 28)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f59026d16a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 2 (1, 32, 13, 13)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n0rwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5902670c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 3 (1, 64, 13, 13)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5902670860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 4 (1, 64, 6, 6)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nQgghhOgS/wdVAX8YuVxkSwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5902592cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 5 (1, 128)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAACECAYAAADcM3tHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFcVJREFUeJzt3X/wXXV95/Hni1DAxh+AUbdNQEJN\nXdGqkRTtuqOtInxtHeLO4hqru7TLLtNOGdtt3V1YtrJLp6PWzrbuLHVNMdU6bimltf1uB40s4Oi2\nxSYxFg00NUQWvkaFCAob3KRJ3vvHPTdcbu49936vfH9ceD5m7uSe8/6ccz4kh8+97/v5cVJVSJIk\nSZKk6XHCUldAkiRJkiTNj8m8JEmSJElTxmRekiRJkqQpYzIvSZIkSdKUMZmXJEmSJGnKmMxLkiRJ\nkjRlTOYlSZIkSZoyJvOSJEmSJE0Zk3lJkiRJkqbMiUtdAUmSJEmSlouZmZnav3//cft37Nixtapm\nlqBKA5nMS5IkSZLU2L//AbZv/4vj9idPW7UE1RnKZF6SJEmSpGOOAv9vqSsxksm8JEmSJEnHmMxL\nkiRJkjRljgIHlroSI5nMS5IkSZJ0jD3zkiRJkiRNmcJkXpIkSZKkqXIE+L9LXYmRTOYlSZIkSTrG\nnnlJkiRJkqaMPfOSJEmSJE0Ze+YlSZIkSZoyR4GDS12JkUzmJUmSJEk65igOs5ckSZIkaar4nHlJ\nkiRJkqbMdMyZP2GpKyBJkiRJ0vLRXc2+/9UuyUyS3Un2JLliQPyXk9yZ5I4ktyR5fk/sSJIvNq/Z\ncWppz7wkSZIkScfMv2c+yQrgWuANwBywLclsVd3ZU2wnsKGqHk3y88BvAG9tYt+tqpfP55r2zEuS\nJEmSdEx3znz/q9V5wJ6q2ltVh4DrgY29Barqtqp6tNm8HVjzvdTSZF6SJEmSpGOOAgcGvFiVZHvP\n67Keg1YD9/VszzX7hrkU+GTP9inNOW9P8uZxaukwe0mSJEmSjhm6mv3+qtow5KAM2FcDCybvADYA\nr+3ZfWZV7UtyNnBrki9V1d1ttRwrmU8yA3wAWAFcV1XvHVG+Juny/wctsW9McL6Fsq4l9lBLbP8T\nXZER1p87/F9h546jQ2NrW875zJbYkZbYl1tii2n9qcNjO7894Tlbbvadw/+aObvlnHsnqwrf1xJr\n+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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f59017c1be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 6 (1, 128)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAACECAYAAADcM3tHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAGX1JREFUeJzt3X+wX3V95/Hny9CA4i801tYEJKyx\nK1glElHrVq2CxtVJnF0co3UWKzuMDox2rdOF1eJuXKf+6OjaMVUymtbuVFPE6t5xYiOKbNu1aG4M\nggmlhMjCNShG8McKTQx57x/f8718+eb7Pfd7v5Dce8nzMXMm55z3+Zzzyc3Jud/39/M5n0+qCkmS\nJEmStHA8Yq4rIEmSJEmSZsdkXpIkSZKkBcZkXpIkSZKkBcZkXpIkSZKkBcZkXpIkSZKkBcZkXpIk\nSZKkBcZkXpIkSZKkBcZkXpIkSZKkBcZkXpIkSZKkBea4ua6AJEmSJEnzxerVq2vfvn2H7d++ffvW\nqlo9B1UayGRekiRJkqTGvn0/YnLy/xy2P3nkkrZySVYDHwUWAZ+sqvcPOe484HPAc6tqstl3KXAB\ncB/wtqraOlM9TeYlSZIkSZp2CPiXWZVIsgjYAJwLTAHbkkxU1a6+4x4DvA34Zs++04F1wBnAU4Cv\nJnl6Vd3Xdk3fmZckSZIkaVo3me9fWp0N7K6qPVV1ANgMrB1w3HuBD/adcC2wuar2V9X3gN3N+VqZ\nzEuSJEmSNO0Q8IsBC0uSTPYsF/YUWgrc3rM91eyblmQlcHJVfanvgjOWHcRu9pIkSZIkTRvazX5f\nVa0aUigD9tV0MHkE8BHgTbMtO4zJvCRJkiRJ04rZvjNPpzX95J7tZcDenu3HAM8ErkkC8GvARJI1\nI5QdyGRekiRJkqRp9wH/b7aFtgErkiwHvk9nQLs3dINV9VNgejT8JNcA76yqyST3Ap9J8mE6A+Ct\nAL410wVN5iVJkiRJmjb7lvmqOpjkYmArnanpNlXVziTrgcmqmmgpuzPJFcAu4CBw0Uwj2QOkasau\n+JIkSZIkHRNWrfpXNTn5wcP2J+dtb3ln/qizZV6SJEmSpGljvTN/1JnMS5IkSZI07RCwf64rMSOT\neUmSJEmSph1ijAHwjjqTeUmSJEmSpg2dZ35eecRcV0CSJEmSpPmj+858/9IuyeokNyXZneSSAfG3\nJLkhyXVJ/iHJ6c3+U5Pc2+y/LsknRqmlLfOSJEmSJE2b/TzzSRYBG4BzgSlgW5KJqtrVc9hnquoT\nzfFrgA8Dq5vYLVV15myuacu8JEmSJEnTxmqZPxvYXVV7quoAsBlY+4CzVv2sZ/PE5kJjs2VekiRJ\nkqRpQ9+ZX5Jksmd7Y1VtbNaXArf3xKaA5/WfIMlFwDuAxcBLe0LLk+wAfga8u6r+fqZamsxLkiRJ\nkjTtEPCLQYF9VbVqSKEM2HdYy3tVbQA2JHkD8G7gfOAO4JSq+nGSs4AvJjmjryX/MHazlyRJkiRp\nWrdlflbd7KeAk3u2lwF7W47fDLwGoKr2V9WPm/XtwC3A02e64Egt80lWAx8FFgGfrKr3tx3/qKQe\nNyR25ygXfAgtbYk9viXW9lO/e8y6HAlLWmJ3tcRObIn9vCX2xJbYo1piS1p+2Dt+0lLwIdb29/61\nltjA7+UaP2iJtd1jbT/nk1pi97bEnn7WWUNjd2zfPjTW9ndY3BI70BJb+bThsbt3D4/taznnk1ti\nt7TE2qxs+Urz3kPDY231bIuNa+VThsf+qeWB1fb/8pSW3wA7Dg6PPablnMtaYv/cEnvWrw6P/aDl\nF8ejW855c0tsXCcP2X/7kP0PRtvz45ctsbbnVdv9cE97dcbyKy2xtr9Dm0e2xNqej21WPnZ4bEdr\nm0jLOReNV44zh//H/O724f8xx/15tjm+Jdb2+7RtyKjW3xstN+iulhu07YXT1uudNfxnvaPlZ30k\nrBz2cAF2PMQPmJXPbLnWd4fHfqPlnPtbYre2xJ7QEmv7HNv2fGx77vyoJXa0nd4S29USG9fKlv/Q\nO1r+AVcO+WHfeg/s21+DWqIfJsaamm4bsCLJcuD7wDrgDb0HJFlRVd2PKK+i+biS5EnAXVV1X5LT\ngBXAnpkuOGMyP+KofA/wOOCCIbGPzHTBh9gftsRe3RJ7T0vsyjHrciSsa4l9tiX2gpbYV1ti57XE\nhvU3AXjz7wyPnfiFloIPsbY6tt0r326Jva8l9oqWWNtLMP+uJXZDS+zqycmhsf+e4c/bP24556kt\nsVtbYpMfHh773JrhsT9vOefbWmL/viXWZvKE4bEbWj48bmo558aW2Lgm3zo89vw/Gh5ru+c/1vLt\n3Ik/HB777ZZzfqgldm5LbLLlYfaBPx0e+62Wc65uiY3rXUP2//4RuFbb86PtA+k3WmLDv+7rfAJ5\nqLXkJ2N/AfKslth3xjzn5AuHx0788pjnHNaqMWPB4enNigz/ZqutEWJcK1pibc+Wf2yJ3doSm2xJ\nMs/81vDYfS3nbPskPNnysz6x5Wd9JEz+wfDYiQ/xA2ZyouVapw2PfablnDe1xN7cElvbEmv7HPvK\nllhbQ97HWmJH2xdbYm3PuXFNtjyQT2xpZJl82eD9q7724Ooz/x1itqPZV9XBJBcDW+k0gm+qqp1J\n1gOTVTUBXJzkHDrfwd5Np4s9wIuA9UkO0nmsvaWq2r7TAkZrmZ8elQ8gSXdUviPxpZEkSZIkSXNo\nrJZ5qmoLsKVv32U9628fUu7zwOdne71RkvlRR+W7ELgQoKW3miRJkiRJ81h3arr5bZRkftRR+TbS\n9C799eRBzZcnSZIkSdLcuI/ZdrOfC6Mk87MdlU+SJEmSpAWqaB/acX4YJZmfcVQ+SZIkSZIeHmY/\nAN5cmHGe+ao6CHRH5bsRuKKqdh7pikmSJEmSdPSNNc88SVYnuSnJ7iSXDIi/JckNSa5L8g9JTu+J\nXdqUuylJ26Q200aaZ37QqHySJEmSJD38FNTsutmPOKX7Z6rqE83xa4APA6ubpH4dcAbwFOCrSZ5e\nVW2zb87cMi9JkiRJ0jFjvIb56Sndq+oA0J3SfVpV/axn80TuH1h+LbC5qvZX1feA3c35Wo3UMi9J\nkiRJ0jGhgF8OjCxJMtmzvbGZ1Q1Gn9L9IuAdwGLgpT1lr+0ru3SmaprMS5IkSZLUNTyZ31dVq4aU\nGnVK9w3AhiRvAN4NnD9q2X4m85IkSZIkdRWjdKvvN9sp3TcDHx+zLOA785IkSZIk3a/bMt+/tJue\n0j3JYjoD2k30HpBkRc/mq4Cbm/UJYF2S45sp4VcA35rpgrbMS5IkSZLUNbyb/fAiVQeTdKd0XwRs\nqqqdSdYDk1U1AVyc5Jzm7HfT6WJPc9wVwC7gIHDRTCPZg8m8JEmSJEn3645mP0uDpnSvqst61t/e\nUvZ9wPtmcz2TeUmSJEmSugo4MNeVmJnJvCRJkiRJXWN0s58LJvOSJEmSJHWN2c3+aDOZlyRJkiSp\na4G0zDs1nSRJkiRJXd155vuXGSRZneSmJLuTXDIg/o4ku5Jcn+RrSZ7aE7svyXXNMtFfdhBb5iVJ\nkiRJ6hqjZT7JImADcC4wBWxLMlFVu3oO2wGsqqp7krwV+CDwuiZ2b1WdOZtr2jIvSZIkSVJXN5nv\nX9qdDeyuqj1VdQDYDKx9wGmrvl5V9zSb1wLLHkw1TeYlSZIkSerqDoB3eDf7JUkme5YLe0otBW7v\n2Z5q9g1zAfDlnu0TmnNem+Q1o1TTbvaSJEmSJHUN72a/r6pWDSmVIWc6/MDkjcAq4MU9u0+pqr1J\nTgOuTnJDVd3SVk2TeUmSJEmSugo4MOtSU8DJPdvLgL39ByU5B3gX8OKq2j99yaq9zZ97klwDrARa\nk3m72UuSJEmS1HUI2D9gabcNWJFkeZLFwDrgAaPSJ1kJXA6sqao7e/aflOT4Zn0J8EKgd+C8gWyZ\nlyRJkiSpa4yW+ao6mORiYCuwCNhUVTuTrAcmq2oC+BDwaOBzSQBuq6o1wDOAy5McotPg/v6+UfAH\nMpmXJEmSJKlrjKnpAKpqC7Clb99lPevnDCn3DeA3Z3s9k3lJkiRJkrq6o9nPcybzkiRJkiR1jdky\nf7SZzEuSJEmS1GUyL0mSJEnSAlMsiG72Tk0nSZIkSVJXt2W+f5lBktVJbkqyO8klA+LvSLIryfVJ\nvpbkqT2x85Pc3Cznj1JNk3lJkiRJkrq6U9P1Ly2SLAI2AK8ETgden+T0vsN2AKuq6lnAlcAHm7JP\nAN4DPA84G3hPkpNmquZIyXySW5PckOS6JJOjlJEkSZIkacHpjmbfv7Q7G9hdVXuq6gCwGVjbe0BV\nfb2q7mk2rwWWNeuvAK6qqruq6m7gKmD1TBeczTvzv1NV+2ZxvCRJkiRJC8t4A+AtBW7v2Z6i09I+\nzAXAl1vKLp3pgg6AJ0mSJElS1/B55pf09VTfWFUbm/UMOL4GnSTJG4FVwItnW7bXqMl8AV9JUsDl\nPRXurdCFwIUAjx3xpJIkSZIkzSvDW+b3VdWqIaWmgJN7tpcBe/sPSnIO8C7gxVW1v6fsS/rKXjNT\nNUcdAO+FVfUcOi/zX5TkRf0HVNXGqlpVVaseNeJJJUmSJEmaV8YbzX4bsCLJ8iSLgXXARO8BSVYC\nlwNrqurOntBW4OVJTmoGvnt5s6/VSC3zVbW3+fPOJF+g83L/341SVpIkSZKkBWOMeear6mCSi+kk\n4YuATVW1M8l6YLKqJoAPAY8GPpcE4LaqWlNVdyV5L50vBADWV9VdM11zxmQ+yYnAI6rq5836y4H1\ns/urSZIkSZK0AIw3AB5VtQXY0rfvsp71c1rKbgI2zeZ6o7TMPxn4QvPNwXHAZ6rqb2dzEUmSJEmS\nFoRDzDiv/HwwYzJfVXuAZx+FukiSJEmSNLcK2D/jUXPOqekkSZIkSeoqHh4t85IkSZIkHTPGfGf+\naBt1ajpJkiRJkh7+DtEZzb5/mUGS1UluSrI7ySUD4i9K8u0kB5Oc1xe7L8l1zTLRX3YQW+YlSZIk\nSeoao2U+ySJgA3AuMAVsSzJRVbt6DrsNeBPwzgGnuLeqzpzNNU3mJUmSJEnqGq+b/dnA7mYAeZJs\nBtYC08l8Vd3axA49FNW0m70kSZIkSV3FON3slwK392xPNftGdUKSySTXJnnNKAVsmZckSZIkqdEy\nmP2SJJM92xuramOzniGnGtUpVbU3yWnA1UluqKpb2gqYzEuSJEmS1GjpZb+vqlYNKTYFnNyzvQzY\nO/I1q/Y2f+5Jcg2wEmhN5u1mL0mSJElSY8zB7LcBK5IsT7IYWAeMNCp9kpOSHN+sLwFeSM+79sOY\nzEuSJEmS1Oi2zPcvrWWqDgIXA1uBG4ErqmpnkvVJ1gAkeW6SKeC1wOVJdjbFnwFMJvkO8HXg/X2j\n4A9kN3tJkiRJkhrd8e9mXa5qC7Clb99lPevb6HS/7y/3DeA3Z3s9k3lJkiRJkhrjzUx39JnMS5Ik\nSZLUMJmXJEmSJGmB6Q6AN9+ZzEuSJEmS1FgoLfOOZi9JkiRJUqOAAwOWmSRZneSmJLuTXDIg/qIk\n305yMMl5fbHzk9zcLOePUk9b5iVJkiRJaozTzT7JImADcC4wBWxLMtE3xdxtwJuAd/aVfQLwHmAV\nne8Stjdl7267pi3zkiRJkiQ1xplnHjgb2F1Ve6rqALAZWPuA81bdWlXX0/m+oNcrgKuq6q4mgb8K\nWD3TBU3mJUmSJElqjJnMLwVu79meavaNYqyydrOXJEmSJKlRDO1mvyTJZM/2xqra2KxnyKlGMVZZ\nk3lJkiRJkhoto9nvq6pVQ4pNASf3bC8D9o54ySngJX1lr5mpkN3sJUmSJElqHGKsbvbbgBVJlidZ\nDKwDJka85Fbg5UlOSnIS8PJmXyuTeUmSJEmSGt1u9v1La5mqg8DFdJLwG4ErqmpnkvVJ1gAkeW6S\nKeC1wOVJdjZl7wLeS+cLgW3A+mZfK7vZS5IkSZLU6M4zP+tyVVuALX37LutZ30anC/2gspuATbO5\nnsm8JEmSJEmNQ8D+ua7ECFI16gB7szhp8iPg/zabS4B9D/lF9HDl/aJRea9oNrxfNCrvFc2G94tG\n9XC7V55aVU+a60ocKUuTeuuA/X8E21sGwDvqjkjLfO8/bJLJ+fQX1vzm/aJRea9oNrxfNCrvFc2G\n94tG5b2ysLSMZj+v2M1ekiRJkqTGIWYe8G4+cDR7SZIkSZIa3Zb5WU5NR5LVSW5KsjvJJQPixyf5\n6yb+zSSnNvtPTXJvkuua5ROj1PNotMxvPArX0MOH94tG5b2i2fB+0ai8VzQb3i8alffKAjJON/sk\ni4ANwLnAFLAtyURV7eo57ALg7qp6WpJ1wAeA1zWxW6rqzFld80gMgCdJkiRJ0kL0pKReM2D/J1sG\nwEvyAuC/VtUrmu1LAarqj3uO2doc849JjgN+ADwJeCrwpap65mzqaTd7SZIkSZIaY3azXwrc3rM9\n1ewbeExVHQR+CjyxiS1PsiPJ/07y26PU0wHwJEmSJElqFHBgcGhJksme7Y1V1X2FIkNO1WvYMXcA\np1TVj5OcBXwxyRlV9bO2eh7RlvmZBgDQsSvJyUm+nuTGJDuTvL3Z/4QkVyW5ufnzpLmuq+aHJIua\nbyu/1GwvbwYOubkZSGTxXNdR80OSxye5Msk/Nc+YF/hs0SBJ/lPzO+i7ST6b5ASfLepKsinJnUm+\n27Nv4LMkHX/afOa9Pslz5q7mmgtD7pcPNb+Lrk/yhSSP74ld2twvNyV5xdzUWsN0R7PvX4B9VbWq\nZ+kdC2EKOLlnexmwt+/U08c03ewfB9xVVfur6scAVbUduAV4+kz1PGLJfM8AAK8ETgden+T0I3U9\nLTgHgT+oqmcAzwcuau6PS4CvVdUK4GvNtgTwduDGnu0PAB9p7pW76QwoIgF8FPjbqvrXwLPp3Dc+\nW/QASZYCbwNWNe8oLgK6gxH5bBHAXwCr+/YNe5a8EljRLBcCHz9KddT88Rccfr9cBTyzqp4F/DNw\nKUDzmXcdcEZT5s+a3EnzxJjd7LcBK5ovhRfT+Tee6DtmAji/WT8PuLqqKsmTuvdAktPoPEv2zHTB\nI9kyfzawu6r2VNUBYDOw9gheTwtIVd1RVd9u1n9O58P2Ujr3yKebwz4NDBp7QseYJMuAVwGfbLYD\nvBS4sjnEe0UAJHks8CLgUwBVdaCqfoLPFg12HPDIpnXkUXS6OfpsEQBV9XfAXX27hz1L1gJ/WR3X\nAo9P8utHp6aaDwbdL1X1lea9aIBr6bTUQud+2dy0xn4P2E0nd9I8MU4y3/xbXwxspZPbXFFVO5Os\nT7KmOexTwBOT7Abewf1fCL4IuD7Jd+j8DnpLVfU/fw5zJN+ZHzQAwPOO4PW0QDXzK64Evgk8uaru\ngE7Cn+RX57Bqmj/+B/CHwGOa7ScCP+n5BTlogBEdm04DfgT8eZJnA9vp9Orw2aIHqKrvJ/kT4Dbg\nXuArdO4Xny1qM+xZMmzgqzuOcv00f70Z+OtmfSmd5L7LZ8080+1mP1tVtQXY0rfvsp71fwFeO6Dc\n54HPz/Z6R7JlfpQBAHSMS/JoOjfu7880wIOOTUleDdzZvD80vXvAoT5fBJ0vqZ8DfLyqVgK/wC71\nGqB513ktsBx4CnAina7S/Xy2aBT+XtJQSd5F5xXTv+ruGnCY98s8MmY3+6PuSCbzowwAoGNYkl+h\nk8j/VVX9TbP7h91uac2fd85V/TRvvBBYk+RWOq/rvJROS/3jm66x4PNF95sCpqrqm832lXSSe58t\n6ncO8L2q+lFV/RL4G+C38NmidsOeJX7u1UBJzgdeDfxuVXUTdu+Xec5kfrQBAHSMat55/hRwY1V9\nuCfUOyjE+cD/Otp10/xSVZdW1bKqOpXOc+Tqqvpd4Ot0Bg4B7xU1quoHwO1JfqPZ9TJgFz5bdLjb\ngOcneVTzO6l7r/hsUZthz5IJ4D80o9o/H/hptzu+jl1JVgP/GVhTVff0hCaAdUmOT7KczmBn35qL\nOmqwYuho9vNK7v+C6AicPPm3dFrQFgGbqup9R+xiWlCS/Bvg74Eb6LyWAvBf6Lw3fwVwCp0PWq8d\nZfAHHRuSvAR4Z1W9uhnpczPwBGAH8Maq2j+X9dP8kORMOoMlLqYzEuzv0fny2meLHiDJfwNeR6f7\n6w7gP9J5b9Vni0jyWeAlwBLgh8B7gC8y4FnSfCH0MTojk98D/F5VTQ46rx6ehtwvlwLHAz9uDru2\nqt7SHP8uOu/RH6TzuumXj3adNdwJSZ06YP9NsL2qVh3t+gxzRJN5SZIkSZIWkuOTesqA/bfOkMw3\nvTE+Sqcx+5NV9f6++PHAXwJn0fmS53VVdWsTu5TOdKj3AW+rqq0z1fNIdrOXJEmSJGlBKeDAgKVN\nM0/8BjqDqZ4OvD7J6X2HXQDcXVVPAz4CfKApezqd10nPoNPD58+68863MZmXJEmSJKkx5gB4ZwO7\nq2pPVR2g88rW2r5j1gKfbtavBF7WvKazFthcVfur6nvA7uZ8rUzmJUmSJElqdOeZn+UAeEuB23u2\np5p9A4+pqoPAT4Enjlj2MMfNdIAkSZIkSceKQ7D1553BDPudkKR3cMuNVbWxWc+A4/sHqBt2zChl\nD2MyL0mSJElSo6pWj1FsCji5Z3sZsHfIMVNJjgMeB9w1YtnD2M1ekiRJkqQHZxuwIsnyJIvpDGg3\n0XfMBHB+s34ecHV1ppebANYlOT7JcmAF8K2ZLmjLvCRJkiRJD0JVHUxyMbCVztR0m6pqZ5L1wGRV\nTQCfAv5nkt10WuTXNWV3JrkC2AUcBC6qqvtmuqbzzEuSJEmStMDYzV6SJEmSpAXGZF6SJEmSpAXG\nZF6SJEmSpAXGZF6SJEmSpAXGZF6SJEmSpAXGZF6SJEmSpAXGZF6SJEmSpAXGZF6SJEmSpAXm/wPQ\nu8xeRrmL5wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5901c51a58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation: 7 (1, 10)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f59019f2cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def display_tensor(tensors):\n",
    "    if tensors.shape == (1, 1, 28, 28):\n",
    "        tt = np.hstack(np.transpose(tensors[0], (0, 1, 2)))\n",
    "        plt.figure(figsize=(15,1))\n",
    "        plt.imshow(tt, interpolation='None', cmap='gray')\n",
    "        plt.show()\n",
    "    else:\n",
    "        tt = np.hstack(np.transpose(tensors[0], (0, 1, 2)))\n",
    "        plt.figure(figsize=(15,1))\n",
    "        plt.imshow(tt, interpolation='None', cmap='hot')\n",
    "        plt.show()        \n",
    "        \n",
    "def display_matrix(matrix):\n",
    "    num_activations = len(matrix)\n",
    "    tt = np.repeat(matrix, 10, axis=0)\n",
    "    \n",
    "    plt.figure(figsize=(20,2))\n",
    "    plt.imshow(tt, interpolation='None', cmap='hot')\n",
    "    plt.colorbar()\n",
    "    plt.show()\n",
    "\n",
    "    \n",
    "def display_activations(activations_tensor):\n",
    "    img_size = activations_tensor[0][0].shape[0]\n",
    "    assert img_size == 1, 'One image at a time to visualize!'\n",
    "\n",
    "    for i, activation_map in enumerate(activations_tensor):\n",
    "        print('Displaying activation: {} {}'.format(i, activation_map[0].shape))\n",
    "        activation_map = activation_map[0]\n",
    "        shape = activation_map.shape\n",
    "        if len(shape) == 4:\n",
    "            display_tensor(activation_map)\n",
    "            pass\n",
    "        if len(shape) == 2:\n",
    "            display_matrix(activation_map)\n",
    "        \n",
    "display_activations(activations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
